0x1 数据组织
Unreal Engine的数据组织是典型的Scene Graph数据结构。
Scene拥有Component。
Component是各种渲染节点的抽象。
Render通过访问Scene拥有的Component来完成各种渲染操作。
0x2 线程模型
Unreal Engine代码中封装了典型的Thread/Looper机制来支持多线程。
多线程之间的通信采用Post Task的方式来进行,避免了加锁操作。
下图说明了Unreal Engine三个线程之间的交互。
Unreal Engine的三个线程分别是GameThread, RenderThread, RHIThread。
GameThread可以理解为Controller线程,完成整个渲染流程的控制。
RenderThread是典型的渲染流程,从Scene中读入数据,完成各种效果的处理,然后调用RHIThread完成绘制。
RHIThread是具体调用图形API(OpenGL, DirectX, Vulkan, Metal)来完成绘制的线程。
下图说明了Unreal Engine绘制的简要流程。
下图说明了Unreal Engine渲染模块的层次调用关系。
Slate是Unreal Engine中包括的UI渲染框架。
Renderer里面包括两种渲染器。
然后是RenderCore模块。包括各种渲染效果的处理。
最底层是具体调用图形API的调用。